///////////////////////////////
// Analizador léxico XML
///////////////////////////////

lexer grammar AnalexXML;

options {
  language = Java;
}

@header {
  package practpl.seis;
}

@members {
     private ArrayList<RecognitionException> errors = new ArrayList<RecognitionException>();
     public ArrayList<RecognitionException> getErrors() {
        return errors;
     }
     @Override
     public void reportError (RecognitionException e) {
        String msg = getErrorMessage(e, getTokenNames());
        System.err.println(msg);
        errors.add(e);
     }
     
     boolean abierta = false;
}

fragment LETRA: ('a'..'z')|('A'..'Z')| ' ';

BLANCO : (' '|'\t'|'\r\n') {skip();};

AETIQUETA : '<' {abierta = true;};
CETIQUETA : '>' {abierta = false;};
AETIQUETACIERRE: '</';

BARRA: '/';
COMILLAS: '"';
IGUAL : '=';

IDENT : (LETRA|'.')+;
VALORATR : COMILLAS IDENT COMILLAS;

ATRIBUTO: {abierta}? (IDENT IGUAL VALORATR);
ATRIBUTO2: IDENT IGUAL VALORATR;

//CADENA : (~('<'))*;

ABIBLIOTECA : AETIQUETA 'biblioteca' ATRIBUTO* CETIQUETA;
CBIBLIOTECA : AETIQUETACIERRE 'biblioteca' CETIQUETA;

ALIBRO : AETIQUETA 'libro' ATRIBUTO* CETIQUETA;
CLIBRO : AETIQUETACIERRE 'libro' CETIQUETA;

ATITULO : AETIQUETA 'titulo' ATRIBUTO* CETIQUETA;
CTITULO : AETIQUETACIERRE 'titulo' CETIQUETA;

AAUTOR : AETIQUETA 'autor' ATRIBUTO* CETIQUETA;
CAUTOR : AETIQUETACIERRE 'autor' CETIQUETA;

AEDITORIAL : AETIQUETA 'editorial' ATRIBUTO* CETIQUETA;
CEDITORIAL : AETIQUETACIERRE 'editorial' CETIQUETA;

COMENTARIO: '<!--' (.)* '-->' {skip();};
